from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from . import models
from .serializers import *
from django.core.paginator import Paginator
from django.db.models import Q

# Create your views here.


#登录
class LoginView(APIView):
    def post(self,request):
        # 1 获取前端传来的数据
        username=request.POST.get('username','').strip()
        password=request.POST.get('password','').strip()

        # 2 数据验证
        obj=models.Staff.objects.filter(username=username,password=password).first()

        if obj:
            return Response({'code':1000,'msg':'登录成功'})
        return Response({'code':1001,'msg':'登录失败'})



        pass



#部门表
class DepartmentView(APIView):
    def get(self,request):
        # 1 获取所有有效数据
        depobj=models.Department.objects.filter(status=1).all()

        # 2 序列化数据
        obj=DepartmentSerializer(depobj,many=True)

        # 3 返回数据
        return Response({'code':1000,'msg':'','data':obj.data})



    #添加
    def post(self,request):
        # 1 接收前端传来的数据
        name=request.POST.get('name','').strip()

        # 2 验证数据的重复性
        depobj=models.Department.objects.filter(name=name).first()
        if depobj:
            return Response({'code':1001,'msg':'数据已存在'})

        # 3 构造数据
        data={
            'name':name,
        }

        # 4 反序列化
        obj=DepartmentUnserializer(data=data)

        # 5 判断约束
        if obj.is_valid():
            flag=obj.save()
            if flag:
                return Response({'code': 1000, 'msg': '添加成功'})
            return Response({'code': 1003, 'msg': '添加失败'})

        # 6 打印错误
        print(obj.errors)

        # 7 返回值
        return Response({'code':1002,'msg':'参数错误'})



#员工表
class StaffView(APIView):
    def get(self,request):
        # 1 接收前端的p值
        p=request.GET.get('p',1)
        keyword=request.GET.get('keyword','').strip()
        # 2 获取所有有效的数据  通过姓名模糊查询
        staobj=models.Staff.objects.filter(Q(username__contains=keyword)).all()

        # 3 实列化分页类
        page_obj=Paginator(staobj,per_page=3)

        # 4 获取分页的范围
        page=[i for i in page_obj.page_range]

        # 5 获取当前页数据
        try:
            page_data=page_obj.page(p)
        except:
            page_data = page_obj.page(1)

        # 6 判断上一页和下一页
        previous=page_data.has_previous()
        next=page_data.has_next()

        # 7 序列化当前页数据
        obj=StaffSerializer(page_data,many=True)

        # 8 构造数据
        data={
            'data':obj.data,
            'page':page,
            'previous':previous,
            'next':next
        }

        # 9 返回数据
        return Response({'code':1000,'msg':'','data':data})




    #添加
    def post(self,request):
        # 1 接收前端的参数
        username=request.POST.get('username','').strip()
        password=request.POST.get('password','').strip()
        cate_id=request.POST.get('cate_id',0)

        # 2 验证数据的重复性
        staobj=models.Staff.objects.filter(username=username).first()
        if staobj:
            return Response({'code':1001,'msg':'用户已存在'})

        # 3 构造数据
        data={
            'username':username,
            'password':password,
            'cate_id':cate_id,
        }

        # 4 将数据进行反序列化
        obj=StaffUnserializer(data=data)


        # 5 约束判断
        if obj.is_valid():
            flag=obj.save()
            if flag:
                return Response({'code': 1000, 'msg': '添加成功'})
            return Response({'code': 1003, 'msg': '添加失败'})
        # 6 打印错误信息
        print(obj.errors)

        # 7 返回值
        return Response({'code':1002,'msg':'参数错误'})






    #删除
    def delete(self,request):
        # 1 接收前端的参数
        id=request.POST.get('id',0)

        # 2 判断数据是否存在
        staobj=models.Staff.objects.filter(id=id).first()
        if staobj:
            obj=models.Staff.objects.filter(id=id).delete()
            if obj:
                return Response({'code':1000,'msg':'删除成功'})
            return Response({'code': 1001, 'msg': '删除失败'})
        return Response({'code': 1002, 'msg': '数据不存在'})



